import { FrontSide } from "three";
import Enum from "./Enum";
import Const from "./Const";

export default class Config {
    /**
     * 地图配置
     */
    public static Map = {
        geographySystem: Const.EPSGType.EPSG84, //地图使用的地理坐标系，目前可以支持wgs84和gcj02
        zoom: 16,
        minZoom: 3,
        maxZoom: 18,
        IPU: 39.37,
        DPI: 96.0,
        ScaleList: [591657527.591554, 295828763.795777, 147914381.8978885, 73957190.94894426, 36978595.47447213, 18489297.737236064, 9244648.868618032, 4622324.434309016, 2311162.217154508, 1155581.108577254, 577790.554288627, 288895.2771443135, 144447.63857215675, 72223.81928607837, 36111.90964303919, 18055.954821519594, 9027.977410759797, 4513.988705379898, 2256.994352689949, 1128.4971763449746, 564.2485881724873, 282.12429408624365, 141.06214704312183],
        zoomVals: [4194304, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1],
        zoomRule: [1000000, 500000, 1000000, 500000, 200000, 100000, 100000, 50000, 20000, 10000, 5000, 2000, 1000, 500, 300, 200, 100, 50, 20],
        DatumPoint: [-Const.Number.MERCATORANGE, Const.Number.MERCATORANGE], //地图左上角的墨卡托坐标
        TileSize: 256,
        tileExpandFactor: 2,
        useDefaultTexture: true,
        ClickColor: "FF0000",
        // fovH: 55,
        target: [0, 0, 0],
        zIndex: 10, //用于瓦片的深度偏移
        useHPCache: false,
        useCarpet: true, //是否开启地图的地毯底图，避免地图拖动的时候没来得及加载的瓦片一片空白。如果开启了背景功能，则该功能无效
        carpetColor: '#D3D3D3', //地毯底图的颜色
        tileDefaultColor: '#A9A9A9', //瓦片默认颜色
        // spatialReference: {
        //     projection: 'EPSG:4326',
        // },
        enableMap: true,
        baseLayer: [
            {
                url: ' https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', //影像底图的url
                urlDecimal: true, //影像底图url中的瓦片行列号是否是十进制，true表示十进制，false表示十六进制
                tileType: 'image', //影像底图
                canNotSelect: true, //true表示该图层不参与射线拾取，false表示图层参与射线拾取
                isAdditionalLayer: false, //是否是额外的图层，用于叠加在其他图层上
                isBackgroundLayer: false, //该图层是否作为地图的背景图层，一般背景图层都放在所有图层的最下面
                mapHeight: 0, //地图的高度, 默认是0
                colorSpace: '', //该图层的纹理使用的颜色空间，参数有：'srgb', 'linear', ''
                maxDataLevel: 18, //该图层的最大数据层级,
                visible: true, //该图层是否可见
                name: '',
            }
        ],

        enableDamping: false, //地图拖动的时候是否带有物理阻力
        maxSlopeAngle: 45, //地图最大倾斜角度
        verticalLevel: 6, //地图层级小于等于该层级开时，相机开始垂直正对着地图

        extraStep: 0, //额外加载瓦片的步长
        patchLoadCount: 7, //瓦片分批次加载，每个批次的瓦片数量是7

        SatelliteConfigMap: new Map<number, { Scale: number, Resolution: number }>(),  //卫星地图的配置信息
        SatelliteTileType: 0, //0表示松散型影像瓦片，1表示紧凑型影像瓦片

        mapRange: {minX: -Const.Number.MERCATORANGE, minY: -Const.Number.MERCATORANGE, maxX: Const.Number.MERCATORANGE, maxY: Const.Number.MERCATORANGE}, //地图范围
    };

    /**
     * 默认相机配置
     */
    public static Camera = {
        lookAt: [121.743119, 28.587164993735467, 0],
        position: [121.743119, 28.587164993735467, 1000, Const.EPSGType.EPSG84],
        cameraScrollSpeed: 15,
        cameraFov: 55,
        // cameraNearFactor: 2.2, //相机近裁剪面系数, 引擎中用该参数通过算法决定最终的相机近裁剪面
        cameraNear: 20, //初始化相机的near值
        isDynamicNear: true, //是否动态调整相机的near值
        isOpenEyeIntersect: false, //是否开启相机与场景中其他物体的相交检测功能
    };

    /**
     * 场景操作相关配置
     */
    public static Scene = {
        around: 'center',
        resizeEnable: true,
        isOpenMapClick: true,
        rotateEnable: true,
        zoomEnable: true,
        touchZoom: true,//双指缩放
        dragEnable: true,
    };

    /**
     * 默认灯光配置
     */
    public static Light = {
        ambientLightType: 'hemiSphere', //ambient
        ambientLightIntensity: 1,
        ambientLightColor: 0xffffff, //"#444444",
        supportLightType: 'single',
        supportLightIntensity: 1, //3,
        supportLightColor: '#ffffff',
        lightDistance: 100, //光源距离初始相机target的距离
        lightHeight: 50, //光源的高度
    }

    /**
     * 默认渲染配置
     */
    public static Render = {
        shadowEnable: false,
        polygonPointNumInShader: 0, //在shader中的多边形顶点数量。该属性只在压平分析，淹没分析，压平分析中使用，如果不使用这三个分析功能不要设置该属性，否则会对性能有影响
        isOpenCircleRange: false, //是否开启圆的范围内物体变色的功能
        isOpenViewFrustum: false, //是否开启视椎体的可视化检测
        isOpenClapProject: false, //是否开启压平分析的功能
        isOpenFlyline: false, //是否开启飞线
        isOpenTextureProject: false, //是否开启纹理投影
        isOpenContourLine: false, //是否开启等高线分析
    };

    /**
     * 默认背景配置
     */
    public static BackGround = {
        // background: Enum.BackGround.Sky
        background: Enum.BackGround.Fog,
        fogColor: '#FFFFFF',
        fogStartAngle: 20,
        imageUrl: '',
        backGroundColor: '#00BFFF',
        backGroundColorA: '#0000FF',
        backGroundColorB: '#FF0000'
    }

    /**
     * 默认3DTiles配置
     */
    public static Tile3d = {
        url: 'https://nasa-ammos.github.io/3DTilesRendererJS/example/data/tileset.json',
        refinement: 1,
        errorTarget: 1,
        loadRange: 100,
        minSize: 800, //内存中可以缓冲的最小瓦片数量，超过这个数量，会把不在可视范围内的瓦片删除掉
        maxSize: 1600, //内存中可以缓冲的最大瓦片数量，超过这个数量，会停止加载瓦片
        maxBytesSize: 0.3 * 2**30,
        minByteSize: 0.2 * 2**30,
        loadSiblings: true,
        displayActiveTiles: true,
        optimizeRaycast: false,
        maxJobs: 6, //优先级队列中每次执行下载解析任务的最大数量。这个值太小会导致瓦片加载不及时，但是会比较流畅；值太大会造成一次性加载解析过多的瓦片，导致卡顿。需要根据实际情况进行调整。
        unloadPercent: 0.05,
        maxDepth: Infinity,
        isLocate: false,
        isOpenAdditionalCamera: true, //是否开启额外的相机，用于预加载当前可视范围附近的数据
        additionCameraFov: 60, //额外相机的FOV
        additionalCameraFactor: 1.5, //额外的相机FOV和正常相机的比例
        isSupportTransparent: true, //是否支持透明
        screenErrorFactor: 1, //屏幕误差缩放的倍数
        isOnlyLoadCoarse: false, //是否只加载粗略瓦片
        canNotSelect: true, //true表示该图层不参与射线拾取，false表示图层参与射线拾取
        isReplaceMaterial: false, //是否把材质替换为引擎自定义的材质
        isComputeBox: false, //是否计算各个瓦片的包围盒
        isCloseGround: true, //是否贴近地面
    }

    /**
     * 默认热力图配置
     */
    public static HeatMapConfig = {
        radius: 50,
        scaleRadius: true,
        maxOpacity: 1,
        minOpacity: 0.5,
        blur: .75,
        color: ['blue', 'green', 'yellow', 'violet', 'red'],
        gradient: {
            '.13': 'rgb(0, 0, 0)',
            '.26': 'rgb(221, 51, 221)',
            '.39': 'rgb(255, 255, 0)',
            '.52': 'rgb(0, 0, 255)',
            '.65': 'rgb(0, 119, 17)',
            '.78': 'rgb(0, 119, 17)'
        },
    }

    /**
     * 默认水纹配置
     */
    public static WaterConfig = {
        color: '#ffffff',
        scale: '4',
        textureWidth: 1024,
        textureHeight: 1024,
        reflectivity: 0.02,
        flowX: 1,
        flowY: 1,
        normalMap0: '/examples/resources/images/Water_2_M_Normal.jpg',
        normalMap1: '/examples/resources/images/Water_2_M_Normal.jpg',
    }

    /**
     * shp数据加载配置
     */
    public static ShapeConfig = {

        //线配置
        lineWidth: 5, //线默认宽度
        lineColor: '#F4F4F4',//线默认颜色
        shapeMinLevel: 16, //shape数据能支持的最小图层
        //线配置
        lineConfig: {
            'motorway': {
                color: '#FFB676',
                width: 5
            },
            'motorway_link': {
                color: '#FFB676',
                width: 5
            },
            'primary': {
                color: '#FEDCA1',
                width: 5
            },
            'primary_link': {
                color: '#FEDCA1',
                width: 5
            },
            'trunk': {
                color: '#FEDCA1',
                width: 5
            },
            'trunk_link': {
                color: '#FEDCA1',
                width: 5
            },
            'secondary': {
                color: '#FFECBA',
                width: 5
            },
            'secondary_link': {
                color: '#FFECBA',
                width: 5
            },
            'tertiary': {
                color: '#D6D8E1',
                width: 5
            },
            'tertiary_link': {
                color: '#D6D8E1',
                width: 5
            },
            'rail': {
                color: '#000000',
                width: 5
            },
            'subway': {
                color: '#FF0000',
                width: 5
            },
            'construction': {
                color: '#B4B4B4',
                width: 5
            },
            'canal': {
                color: '#ADD5FE',
                width: 5
            },
            'river': {
                color: '#ADD5FE',
                width: 5
            },
            'stream': {
                color: '#ADD5FE',
                width: 5
            },
            'ditch': {
                color: '#ADD5FE',
                width: 5
            },
            'drain': {
                color: '#000064',
                width: 5
            }
        },

        //矢量轮廓配置
        polygonFillColor: '#F4F4F4',//矢量填充颜色,default
        polygonBorderColor: 'black',//边线轮廓颜色【未启用】
        polygonBorderWidth: 3,//边线轮廓宽度【未启用】
        showBorder: false,//是否显示边线轮廓
        //矢量轮廓配置表
        polygonConfig: {
            'military': {
                color: '#D6D8E1'
            },
            'aquaculture': {
                color: '#B0FFFF'
            },
            'basin': {
                color: '#B0FFFF'
            },
            'brownfield': {
                color: '#A49C8C'
            },
            'cemetery': {
                color: '#A49C8C'
            },
            'construction': {
                color: '#E6E4E0'
            },
            'greenfield': {
                color: '#E6E4E0'
            },
            'farmland': {
                color: '#C5F0D3'
            },
            'farmyard': {
                color: '#C5F0D3'
            },
            'grass': {
                color: '#C5F0D3'
            },
            'meadow': {
                color: '#C5F0D3'
            },
            'orchard': {
                color: '#C5F0D3'
            },
            'industry': {
                color: '#D1C9BE'
            },
            'retail': {
                color: '#DFDFDF'
            }
            ,
            'commercial': {
                color: '#DFDFDF'
            }
            ,
            'recreation_groun': {
                color: '#DFDFDF'
            }
            ,
            'religious': {
                color: '#F0F0D8'
            }
            ,
            'reservoir': {
                color: '#DFDFDF'
            }
            ,
            'residential': {
                color: '#F0F3FA'
            },
            'park': {
                color: '#C5F0D3'
            },
            'forest': {
                color: '#C5F0D3'
            },
            'water': {
                color: '#ADD5FE'
            }
        },


        //建筑配置
        merge: true, //是否合并建筑
        renderSide: FrontSide, //渲染面
        buildingColor: '#E6F2FF', //建筑颜色
        heightField: 'H', //建筑高度字段
        floorDivisionCount: 0, //shape建筑楼层颜色分层的数量
        floorDivisionArray: [], //用不同的颜色划分楼层

        //POI配置
        textEncode: 'utf-8', //文字编码
        textSize: 200, //文字大小
        baseImageSize: 1000, //图片大小
        showText: true, //是否显示文字
        backGroundColor: "#000000",//文字背景颜色
        textColor: "#2F4F4F",//'#ffffff',//文字颜色 
    }
}
